Take a different approach with metabolites:

  1. ID metabolites responding to microbes
  2. Ask if those are associated with leaf length

Here include genotype for the treatment models but use scaled and centered values for leaf associations.

NOTE: THIS IS THE FINAL ANALYSIS. TRIED AND DID NOT LIKE LME MODELS. TOO MANY SINGULARITIES. I THINK THERE IS NOT ENOUGH DATA TO ESTIMATE BLOCK EFFECCTS WELL.

NOTE: NEXT STEPS: TRY MAKING TERNARY PLOT WITH SIMPLE MEANS.

library(tidyverse)
Registered S3 methods overwritten by 'dbplyr':
  method         from
  print.tbl_lazy     
  print.tbl_sql      
── Attaching packages ──────────────────────────────────────────────── tidyverse 1.3.1 ──
✓ ggplot2 3.3.5     ✓ purrr   0.3.4
✓ tibble  3.1.6     ✓ dplyr   1.0.8
✓ tidyr   1.2.0     ✓ stringr 1.4.0
✓ readr   2.1.2     ✓ forcats 0.5.1
── Conflicts ─────────────────────────────────────────────────── tidyverse_conflicts() ──
x dplyr::filter() masks stats::filter()
x dplyr::lag()    masks stats::lag()
library(broom)

get leaflength data

leaflength <- read_csv("../../plant/output/leaf_lengths_metabolite.csv") %>%
  mutate(pot=str_pad(pot, width=3, pad="0"),
         sampleID=str_c("wyo", genotype, pot, sep="_")) %>%
  select(sampleID, genotype, trt, leaf_avg_std)
Rows: 36 Columns: 6
── Column specification ─────────────────────────────────────────────────────────────────
Delimiter: ","
chr (3): soil, genotype, trt
dbl (3): pot, leaf_avg, leaf_avg_std

ℹ Use `spec()` to retrieve the full column specification for this data.
ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
leaflength %>% arrange(sampleID)

get and wrangle metabolite data

met_raw <-read_csv("../input/metabolites_set1.csv")
Rows: 72 Columns: 671
── Column specification ─────────────────────────────────────────────────────────────────
Delimiter: ","
chr   (6): tissue, soil, genotype, autoclave, time_point, concatenate
dbl (665): submission_number, pot, sample_mass mg, xylulose NIST, xylose, xylonic aci...

ℹ Use `spec()` to retrieve the full column specification for this data.
ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
met <- met_raw %>% 
  mutate(pot=str_pad(pot, width = 3, pad = "0")) %>%
  mutate(sampleID=str_c("wyo", genotype, pot, sep="_")) %>%
  mutate(trt=ifelse(is.na(autoclave), "BLANK", autoclave)) %>%
  select(sampleID, genotype, tissue, trt, sample_mass = `sample_mass mg`, !submission_number:concatenate)  %>%
  
  #bring in leaf length
  left_join({leaflength %>% select(sampleID, leaf_avg_std)}) %>%
  select(sampleID, genotype, tissue, trt, leaf_avg_std, everything()) %>%
  
  #make long
  pivot_longer(!sampleID:sample_mass, names_to = "metabolite", values_to = "met_amt") %>%
  
  #filter away unnamed
  filter(str_detect(metabolite, pattern="^[0-9]+$", negate=TRUE)) %>%
  
  #adjust by sample mass
  mutate(met_per_mg=met_amt/sample_mass) %>%
  
  pivot_wider(id_cols = c(sampleID, genotype, trt, leaf_avg_std), 
              names_from = c(tissue, metabolite), 
              values_from = starts_with("met_"),
              names_sep = "_")
Joining, by = "sampleID"
met 

split this into two data frames, one normalized by tissue amount and one not.

met_per_mg <- met %>% select(sampleID, genotype, trt, leaf_avg_std, starts_with("met_per_mg")) %>%
  as.data.frame() %>% column_to_rownames("sampleID")
met_amt <- met %>% select(sampleID,  genotype, trt, leaf_avg_std, starts_with("met_amt")) %>%
  as.data.frame() %>% column_to_rownames("sampleID")

find sig metabolites

Live vs blank dead

normalized

met_per_mg_lm_results_trt <- met_per_mg_lm %>% mutate(broomtidy.trt = map(lm_trt, broom::tidy)) %>%
  unnest(broomtidy.trt) %>%
  select(metabolite, term, estimate, p.value) %>%
  pivot_wider(id_cols = metabolite, names_from = term, values_from = c(estimate, p.value), names_prefix = "trt_") %>%
  select(-`p.value_trt_(Intercept)`)

met_per_mg_lm_results_leaf <- met_per_mg_lm %>% mutate(broomtidy.leaf = map(lm_leaf, broom::tidy)) %>%
  unnest(broomtidy.leaf) %>%
  select(metabolite, term, estimate, p.value) %>%
  pivot_wider(id_cols = metabolite, names_from = term, values_from = c(estimate, p.value), names_prefix = "leaf_") %>%
  select(-`p.value_leaf_(Intercept)`)

met_per_mg_lm_results <- inner_join(met_per_mg_lm_results_trt, met_per_mg_lm_results_leaf) %>%
  mutate(tissue=str_extract(metabolite,"(leaf|root)")) %>%
  group_by(tissue) %>%
  mutate(across(starts_with("p.value"), .fns = p.adjust, method = "fdr", .names = "FDR_{.col}")) %>%
  rename_with(~ str_replace(.x, "FDR_p.value", "FDR")) %>%
  ungroup()
Joining, by = "metabolite"
met_per_mg_lm_results %>% 
  mutate(both=(FDR_trt_trtlive < 0.1) & (FDR_leaf_value_scale < 0.1)) %>%
  group_by(tissue) %>%
  summarize(across(starts_with("FDR"), ~ sum(.x < .1)), both=sum(both), count=n())

met_per_mg_lm_results %>% 
  mutate(both=(p.value_trt_trtlive < 0.1) & (p.value_leaf_value_scale < 0.1)) %>%
  group_by(tissue) %>%
  summarize(across(starts_with("p.value"), ~ sum(.x < .05)), both=sum(both), count=n())

met_per_mg_lm_results %>% filter(FDR_trt_trtlive < 0.1 & FDR_leaf_value_scale < 0.1) %>% 
  select(metabolite, FDR_trt_trtlive, FDR_leaf_value_scale)



met_per_mg_lm_results %>% 
  #filter(FDR.trt < 0.1 | FDR.leaf < 0.1) %>%
  mutate(sig.both = FDR_trt_trtlive < 0.1 & FDR_leaf_value_scale < 0.1) %>%
  arrange(desc(sig.both), min(.$FDR_trt_trtlive, .$FDR_leaf_value_scale)) %>% 
  write_csv("../output/met_per_mg_lm_full.csv")

raw

met_amt_lm <- met_amt %>%
  mutate(trt=ifelse(str_detect(trt, "live"), "live", "blank_dead")) %>%
  pivot_longer(cols=starts_with("met"), names_to = "metabolite") %>%
  mutate(tissue=str_extract(metabolite, "leaf|root")) %>%

  #scale and center
  group_by(metabolite, genotype, tissue) %>%
  mutate(value_scale=scale(value)) %>%
  group_by(metabolite) %>%
  nest() %>%
  mutate(lm_trt=map(data, ~ lm(value ~ trt * genotype, data=.)),
         lm_leaf=map(data, ~ lm(leaf_avg_std ~ value_scale, data=.)))
met_amt_lm_results_trt <- met_amt_lm %>% mutate(broomtidy.trt = map(lm_trt, broom::tidy)) %>%
  unnest(broomtidy.trt) %>%
  select(metabolite, term, estimate, p.value) %>%
  pivot_wider(id_cols = metabolite, names_from = term, values_from = c(estimate, p.value), names_prefix = "trt_") %>%
  select(-`p.value_trt_(Intercept)`)

met_amt_lm_results_leaf <- met_amt_lm %>% mutate(broomtidy.leaf = map(lm_leaf, broom::tidy)) %>%
  unnest(broomtidy.leaf) %>%
  select(metabolite, term, estimate, p.value) %>%
  pivot_wider(id_cols = metabolite, names_from = term, values_from = c(estimate, p.value), names_prefix = "leaf_") %>%
  select(-`p.value_leaf_(Intercept)`)

met_amt_lm_results <- inner_join(met_amt_lm_results_trt, met_amt_lm_results_leaf) %>%
  mutate(tissue=str_extract(metabolite,"(leaf|root)")) %>%
  group_by(tissue) %>%
  mutate(across(starts_with("p.value"), .fns = p.adjust, method = "fdr", .names = "FDR_{.col}")) %>%
  rename_with(~ str_replace(.x, "FDR_p.value", "FDR")) %>%
  ungroup()
Joining, by = "metabolite"
met_amt_lm_results %>% 
  mutate(both=(FDR_trt_trtlive < 0.1) & (FDR_leaf_value_scale < 0.1)) %>%
  group_by(tissue) %>%
  summarize(across(starts_with("FDR"), ~ sum(.x < .1)), both=sum(both), count=n())

met_amt_lm_results %>% 
  mutate(both=(p.value_trt_trtlive < 0.1) & (p.value_leaf_value_scale < 0.1)) %>%
  group_by(tissue) %>%
  summarize(across(starts_with("p.value"), ~ sum(.x < .05)), both=sum(both), count=n())

met_amt_lm_results %>% filter(FDR_trt_trtlive < 0.1 & FDR_leaf_value_scale < 0.1) %>% 
  select(metabolite, FDR_trt_trtlive, FDR_leaf_value_scale)

met_amt_lm_results %>% 
  #filter(FDR.trt < 0.1 | FDR.leaf < 0.1) %>%
  mutate(sig.both = FDR_trt_trtlive < 0.1 & FDR_leaf_value_scale < 0.1) %>%
  arrange(desc(sig.both), min(.$FDR_trt_trtlive, .$FDR_leaf_value_scale)) %>% 
  write_csv("../output/met_amt_lm_full.csv")

NO BLANK

find sig metabolites

Live vs dead

normalized

```r
met_per_mg_lm <- met_per_mg %>%
  filter(trt != \BLANK\) %>% 
  mutate(trt=ifelse(str_detect(trt, \live\), \live\, \blank_dead\)) %>%
  pivot_longer(cols=starts_with(\met\), names_to = \metabolite\) %>%
  mutate(tissue=str_extract(metabolite, \leaf|root\)) %>%

  #scale and center
  group_by(metabolite, genotype, tissue) %>%
  mutate(value_scale=scale(value)) %>%
  group_by(metabolite) %>%
  nest() %>%
  mutate(lm_trt=map(data, ~ lm(value ~ trt * genotype, data=.)),
         lm_leaf=map(data, ~ lm(leaf_avg_std ~ value_scale, data=.)))

<!-- rnb-source-end -->

<!-- rnb-chunk-end -->


<!-- rnb-text-begin -->




<!-- rnb-text-end -->


<!-- rnb-chunk-begin -->


<!-- rnb-source-begin eyJkYXRhIjoiYGBgclxuYGBgclxubWV0X3Blcl9tZ19sbV9yZXN1bHRzX3RydCA8LSBtZXRfcGVyX21nX2xtICU+JSBtdXRhdGUoYnJvb210aWR5LnRydCA9IG1hcChsbV90cnQsIGJyb29tOjp0aWR5KSkgJT4lXG4gIHVubmVzdChicm9vbXRpZHkudHJ0KSAlPiVcbiAgc2VsZWN0KG1ldGFib2xpdGUsIHRlcm0sIGVzdGltYXRlLCBwLnZhbHVlKSAlPiVcbiAgcGl2b3Rfd2lkZXIoaWRfY29scyA9IG1ldGFib2xpdGUsIG5hbWVzX2Zyb20gPSB0ZXJtLCB2YWx1ZXNfZnJvbSA9IGMoZXN0aW1hdGUsIHAudmFsdWUpLCBuYW1lc19wcmVmaXggPSBcXHRydF9cXCkgJT4lXG4gIHNlbGVjdCgtYHAudmFsdWVfdHJ0XyhJbnRlcmNlcHQpYClcblxubWV0X3Blcl9tZ19sbV9yZXN1bHRzX2xlYWYgPC0gbWV0X3Blcl9tZ19sbSAlPiUgbXV0YXRlKGJyb29tdGlkeS5sZWFmID0gbWFwKGxtX2xlYWYsIGJyb29tOjp0aWR5KSkgJT4lXG4gIHVubmVzdChicm9vbXRpZHkubGVhZikgJT4lXG4gIHNlbGVjdChtZXRhYm9saXRlLCB0ZXJtLCBlc3RpbWF0ZSwgcC52YWx1ZSkgJT4lXG4gIHBpdm90X3dpZGVyKGlkX2NvbHMgPSBtZXRhYm9saXRlLCBuYW1lc19mcm9tID0gdGVybSwgdmFsdWVzX2Zyb20gPSBjKGVzdGltYXRlLCBwLnZhbHVlKSwgbmFtZXNfcHJlZml4ID0gXFxsZWFmX1xcKSAlPiVcbiAgc2VsZWN0KC1gcC52YWx1ZV9sZWFmXyhJbnRlcmNlcHQpYClcblxubWV0X3Blcl9tZ19sbV9yZXN1bHRzIDwtIGlubmVyX2pvaW4obWV0X3Blcl9tZ19sbV9yZXN1bHRzX3RydCwgbWV0X3Blcl9tZ19sbV9yZXN1bHRzX2xlYWYpICU+JVxuICBtdXRhdGUodGlzc3VlPXN0cl9leHRyYWN0KG1ldGFib2xpdGUsXFwobGVhZnxyb290KVxcKSkgJT4lXG4gIGdyb3VwX2J5KHRpc3N1ZSkgJT4lXG4gIG11dGF0ZShhY3Jvc3Moc3RhcnRzX3dpdGgoXFxwLnZhbHVlXFwpLCAuZm5zID0gcC5hZGp1c3QsIG1ldGhvZCA9IFxcZmRyXFwsIC5uYW1lcyA9IFxcRkRSX3suY29sfVxcKSkgJT4lXG4gIHJlbmFtZV93aXRoKH4gc3RyX3JlcGxhY2UoLngsIFxcRkRSX3AudmFsdWVcXCwgXFxGRFJcXCkpICU+JVxuICB1bmdyb3VwKClcbmBgYFxuYGBgIn0= -->

```r
```r
met_per_mg_lm_results_trt <- met_per_mg_lm %>% mutate(broomtidy.trt = map(lm_trt, broom::tidy)) %>%
  unnest(broomtidy.trt) %>%
  select(metabolite, term, estimate, p.value) %>%
  pivot_wider(id_cols = metabolite, names_from = term, values_from = c(estimate, p.value), names_prefix = \trt_\) %>%
  select(-`p.value_trt_(Intercept)`)

met_per_mg_lm_results_leaf <- met_per_mg_lm %>% mutate(broomtidy.leaf = map(lm_leaf, broom::tidy)) %>%
  unnest(broomtidy.leaf) %>%
  select(metabolite, term, estimate, p.value) %>%
  pivot_wider(id_cols = metabolite, names_from = term, values_from = c(estimate, p.value), names_prefix = \leaf_\) %>%
  select(-`p.value_leaf_(Intercept)`)

met_per_mg_lm_results <- inner_join(met_per_mg_lm_results_trt, met_per_mg_lm_results_leaf) %>%
  mutate(tissue=str_extract(metabolite,\(leaf|root)\)) %>%
  group_by(tissue) %>%
  mutate(across(starts_with(\p.value\), .fns = p.adjust, method = \fdr\, .names = \FDR_{.col}\)) %>%
  rename_with(~ str_replace(.x, \FDR_p.value\, \FDR\)) %>%
  ungroup()

<!-- rnb-source-end -->

<!-- rnb-output-begin eyJkYXRhIjoiSm9pbmluZywgYnkgPSBcXG1ldGFib2xpdGVcXFxuIn0= -->

Joining, by =




<!-- rnb-output-end -->

<!-- rnb-source-begin eyJkYXRhIjoiYGBgclxuYGBgclxubWV0X3Blcl9tZ19sbV9yZXN1bHRzICU+JSBcbiAgbXV0YXRlKGJvdGg9KEZEUl90cnRfdHJ0bGl2ZSA8IDAuMSkgJiAoRkRSX2xlYWZfdmFsdWVfc2NhbGUgPCAwLjEpKSAlPiVcbiAgZ3JvdXBfYnkodGlzc3VlKSAlPiVcbiAgc3VtbWFyaXplKGFjcm9zcyhzdGFydHNfd2l0aChcXEZEUlxcKSwgfiBzdW0oLnggPCAuMSkpLCBib3RoPXN1bShib3RoKSwgY291bnQ9bigpKVxuYGBgXG5gYGByXG5cbm1ldF9wZXJfbWdfbG1fcmVzdWx0cyAlPiUgZmlsdGVyKEZEUl90cnRfdHJ0bGl2ZSA8IDAuMSAmIEZEUl9sZWFmX3ZhbHVlX3NjYWxlIDwgMC4xKSAlPiUgXG4gIHNlbGVjdChtZXRhYm9saXRlLCBGRFJfdHJ0X3RydGxpdmUsIEZEUl9sZWFmX3ZhbHVlX3NjYWxlKVxuYGBgXG5gYGAifQ== -->

```r
```r
met_per_mg_lm_results %>% 
  mutate(both=(FDR_trt_trtlive < 0.1) & (FDR_leaf_value_scale < 0.1)) %>%
  group_by(tissue) %>%
  summarize(across(starts_with(\FDR\), ~ sum(.x < .1)), both=sum(both), count=n())

met_per_mg_lm_results %>% filter(FDR_trt_trtlive < 0.1 & FDR_leaf_value_scale < 0.1) %>% 
  select(metabolite, FDR_trt_trtlive, FDR_leaf_value_scale)

<!-- rnb-source-end -->

<!-- rnb-frame-begin eyJtZXRhZGF0YSI6eyJjbGFzc2VzIjpbInRibF9kZiIsInRibCIsImRhdGEuZnJhbWUiXSwibnJvdyI6MiwibmNvbCI6Nywic3VtbWFyeSI6eyJBIHRpYmJsZSI6IjIgw5cgNyJ9fSwicmRmIjoiSDRzSUFBQUFBQUFBQTIxUzNVNkRNQlF1REVaR29pNVI3M3dGQ0dwTWpOZkxIb0M0Wkhla1k5MGcxcGFVTXZYT1IvSUpoNmZRazFRaXlhSDl2bk8rdy9raFgyMGY0MjFNQ0ptUndQUEpMSVFyQ1RldjYrU1prTUFINEpHQUxNejVDVUhYY0luQWxtQytkUVNjMFFQZWxaUWF6b3ZCUHo2K2d4L0FiaDNzV1VNY1dJMnJkL0hQYUg4S0N3VjlaNjB0S3JMa1hOZHQyekdMcnRhcnZOQktHK1AxQ2VrYnBJOU1TUDNWc1B3cHk2enZiaUo1K1NkbTBKdnVpeFBsSFN2YWtuTE1IZXlrcnJEQ1VuWkNUOHBlS1BtUll1bERmOS93NnZ2K1BPMnY1TFRGL3BDTTkxVFQ5S0JBRDJncWlXU2pheWxBNUp1TnpZM0FtYmFieUZNVFl0a0pVOVUrS2F0T3ZDWDNtU1BHVlhqT1dyM3hsekRmOTN1YmE0NURZR1VsY1NOTUhHdUI0d2s1M1RGdXdTV01ZcGhFMnFnYUJtVmJCTFpOdGRRVTQrSlNjbVNHcHNuNUYxZGd0MGJCQWdBQSJ9 -->

<div data-pagedtable="false">
  <script data-pagedtable-source type="application/json">
{"columns":[{"label":["tissue"],"name":[1],"type":["chr"],"align":["left"]},{"label":["FDR_trt_trtlive"],"name":[2],"type":["int"],"align":["right"]},{"label":["FDR_trt_genotypeR500"],"name":[3],"type":["int"],"align":["right"]},{"label":["FDR_trt_trtlive:genotypeR500"],"name":[4],"type":["int"],"align":["right"]},{"label":["FDR_leaf_value_scale"],"name":[5],"type":["int"],"align":["right"]},{"label":["both"],"name":[6],"type":["int"],"align":["right"]},{"label":["count"],"name":[7],"type":["int"],"align":["right"]}],"data":[{"1":"leaf","2":"0","3":"50","4":"1","5":"4","6":"0","7":"176"},{"1":"root","2":"2","3":"21","4":"1","5":"0","6":"0","7":"176"}],"options":{"columns":{"min":{},"max":[10],"total":[7]},"rows":{"min":[10],"max":[10],"total":[2]},"pages":{}}}
  </script>
</div>

<!-- rnb-frame-end -->

<!-- rnb-source-begin eyJkYXRhIjoiYGBgclxuYGBgclxuXG5tZXRfcGVyX21nX2xtX3Jlc3VsdHMgJT4lIFxuICAjZmlsdGVyKEZEUi50cnQgPCAwLjEgfCBGRFIubGVhZiA8IDAuMSkgJT4lXG4gIG11dGF0ZShzaWcuYm90aCA9IEZEUl90cnRfdHJ0bGl2ZSA8IDAuMSAmIEZEUl9sZWFmX3ZhbHVlX3NjYWxlIDwgMC4xKSAlPiVcbiAgYXJyYW5nZShkZXNjKHNpZy5ib3RoKSwgbWluKC4kRkRSX3RydF90cnRsaXZlLCAuJEZEUl9sZWFmX3ZhbHVlX3NjYWxlKSkgJT4lIFxuICB3cml0ZV9jc3YoXFwuLi9vdXRwdXQvbWV0X3Blcl9tZ19sbV9mdWxsX05PQkxBTksuY3N2XFwpXG5gYGBcbmBgYCJ9 -->

```r
```r

met_per_mg_lm_results %>% 
  #filter(FDR.trt < 0.1 | FDR.leaf < 0.1) %>%
  mutate(sig.both = FDR_trt_trtlive < 0.1 & FDR_leaf_value_scale < 0.1) %>%
  arrange(desc(sig.both), min(.$FDR_trt_trtlive, .$FDR_leaf_value_scale)) %>% 
  write_csv(\../output/met_per_mg_lm_full_NOBLANK.csv\)

<!-- rnb-source-end -->

<!-- rnb-frame-begin eyJtZXRhZGF0YSI6eyJjbGFzc2VzIjpbInRibF9kZiIsInRibCIsImRhdGEuZnJhbWUiXSwibnJvdyI6MCwibmNvbCI6Mywic3VtbWFyeSI6eyJBIHRpYmJsZSI6IjAgw5cgMyJ9fSwicmRmIjoiSDRzSUFBQUFBQUFBQTIxUTIyb0NNUkNkdlJZRHRVTDdHN3RVZk9rSGlCOGdMZmkyakRIVzBKaElkbGI5ZXR0a053RmRHaGhtNXVTY3VhMlhtd1hiTUFESUlFOVN5QW9YUXZIMXVhbytBUExVSlFua01QSCs2a2l2UFJOZ0JzT2JQdm9IUWFIeEtOcEF6Z0xJam9Kd2E1UWtFWkNYMVhMZGtDVnZTcDRqL09aaEpYRGZuRkYxb21rNUtqSHFNTEhtVXNjdXovK053QlcyY1lRSXNoMFMxbnZyZEM2N2pTUlA1a1RTYUNkSy9iS2xGL1RmZzkwWFN1d0ltSFhhVDdPcitLSFRQOVg4L1U0TVljUnhuQTM5MDk5UXF3eTFjc0VQSnNTbDBOOVN4OHNVQ3JkQ2hXVHFUdEJmb0Q1WnFTbXU2TkMySmtNWWVZd2JGWkYrYWJqOUFhUXJ6bjc4QVFBQSJ9 -->

<div data-pagedtable="false">
  <script data-pagedtable-source type="application/json">
{"columns":[{"label":["metabolite"],"name":[1],"type":["chr"],"align":["left"]},{"label":["FDR_trt_trtlive"],"name":[2],"type":["dbl"],"align":["right"]},{"label":["FDR_leaf_value_scale"],"name":[3],"type":["dbl"],"align":["right"]}],"data":[],"options":{"columns":{"min":{},"max":[10],"total":[3]},"rows":{"min":[10],"max":[10],"total":[0]},"pages":{}}}
  </script>
</div>

<!-- rnb-frame-end -->

<!-- rnb-chunk-end -->


<!-- rnb-text-begin -->


raw

<!-- rnb-text-end -->


<!-- rnb-chunk-begin -->


<!-- rnb-source-begin eyJkYXRhIjoiYGBgclxuYGBgclxubWV0X2FtdF9sbSA8LSBtZXRfYW10ICU+JVxuICBmaWx0ZXIodHJ0ICE9IFxcQkxBTktcXCkgJT4lIFxuICBwaXZvdF9sb25nZXIoY29scz1zdGFydHNfd2l0aChcXG1ldFxcKSwgbmFtZXNfdG8gPSBcXG1ldGFib2xpdGVcXCkgJT4lXG4gIG11dGF0ZSh0aXNzdWU9c3RyX2V4dHJhY3QobWV0YWJvbGl0ZSwgXFxsZWFmfHJvb3RcXCkpICU+JVxuXG4gICNzY2FsZSBhbmQgY2VudGVyXG4gIGdyb3VwX2J5KG1ldGFib2xpdGUsIGdlbm90eXBlLCB0aXNzdWUpICU+JVxuICBtdXRhdGUodmFsdWVfc2NhbGU9c2NhbGUodmFsdWUpKSAlPiVcbiAgZ3JvdXBfYnkobWV0YWJvbGl0ZSkgJT4lXG4gIG5lc3QoKSAlPiVcbiAgbXV0YXRlKGxtX3RydD1tYXAoZGF0YSwgfiBsbSh2YWx1ZSB+IHRydCAqIGdlbm90eXBlLCBkYXRhPS4pKSxcbiAgICAgICAgIGxtX2xlYWY9bWFwKGRhdGEsIH4gbG0obGVhZl9hdmdfc3RkIH4gdmFsdWVfc2NhbGUsIGRhdGE9LikpKVxuXG5gYGBcbmBgYCJ9 -->

```r
```r
met_amt_lm <- met_amt %>%
  filter(trt != \BLANK\) %>% 
  pivot_longer(cols=starts_with(\met\), names_to = \metabolite\) %>%
  mutate(tissue=str_extract(metabolite, \leaf|root\)) %>%

  #scale and center
  group_by(metabolite, genotype, tissue) %>%
  mutate(value_scale=scale(value)) %>%
  group_by(metabolite) %>%
  nest() %>%
  mutate(lm_trt=map(data, ~ lm(value ~ trt * genotype, data=.)),
         lm_leaf=map(data, ~ lm(leaf_avg_std ~ value_scale, data=.)))

<!-- rnb-source-end -->

<!-- rnb-chunk-end -->


<!-- rnb-text-begin -->




<!-- rnb-text-end -->


<!-- rnb-chunk-begin -->


<!-- rnb-source-begin eyJkYXRhIjoiYGBgclxuYGBgclxubWV0X2FtdF9sbV9yZXN1bHRzX3RydCA8LSBtZXRfYW10X2xtICU+JSBtdXRhdGUoYnJvb210aWR5LnRydCA9IG1hcChsbV90cnQsIGJyb29tOjp0aWR5KSkgJT4lXG4gIHVubmVzdChicm9vbXRpZHkudHJ0KSAlPiVcbiAgc2VsZWN0KG1ldGFib2xpdGUsIHRlcm0sIGVzdGltYXRlLCBwLnZhbHVlKSAlPiVcbiAgcGl2b3Rfd2lkZXIoaWRfY29scyA9IG1ldGFib2xpdGUsIG5hbWVzX2Zyb20gPSB0ZXJtLCB2YWx1ZXNfZnJvbSA9IGMoZXN0aW1hdGUsIHAudmFsdWUpLCBuYW1lc19wcmVmaXggPSBcXHRydF9cXCkgJT4lXG4gIHNlbGVjdCgtYHAudmFsdWVfdHJ0XyhJbnRlcmNlcHQpYClcblxubWV0X2FtdF9sbV9yZXN1bHRzX2xlYWYgPC0gbWV0X2FtdF9sbSAlPiUgbXV0YXRlKGJyb29tdGlkeS5sZWFmID0gbWFwKGxtX2xlYWYsIGJyb29tOjp0aWR5KSkgJT4lXG4gIHVubmVzdChicm9vbXRpZHkubGVhZikgJT4lXG4gIHNlbGVjdChtZXRhYm9saXRlLCB0ZXJtLCBlc3RpbWF0ZSwgcC52YWx1ZSkgJT4lXG4gIHBpdm90X3dpZGVyKGlkX2NvbHMgPSBtZXRhYm9saXRlLCBuYW1lc19mcm9tID0gdGVybSwgdmFsdWVzX2Zyb20gPSBjKGVzdGltYXRlLCBwLnZhbHVlKSwgbmFtZXNfcHJlZml4ID0gXFxsZWFmX1xcKSAlPiVcbiAgc2VsZWN0KC1gcC52YWx1ZV9sZWFmXyhJbnRlcmNlcHQpYClcblxubWV0X2FtdF9sbV9yZXN1bHRzIDwtIGlubmVyX2pvaW4obWV0X2FtdF9sbV9yZXN1bHRzX3RydCwgbWV0X2FtdF9sbV9yZXN1bHRzX2xlYWYpICU+JVxuICBtdXRhdGUodGlzc3VlPXN0cl9leHRyYWN0KG1ldGFib2xpdGUsXFwobGVhZnxyb290KVxcKSkgJT4lXG4gIGdyb3VwX2J5KHRpc3N1ZSkgJT4lXG4gIG11dGF0ZShhY3Jvc3Moc3RhcnRzX3dpdGgoXFxwLnZhbHVlXFwpLCAuZm5zID0gcC5hZGp1c3QsIG1ldGhvZCA9IFxcZmRyXFwsIC5uYW1lcyA9IFxcRkRSX3suY29sfVxcKSkgJT4lXG4gIHJlbmFtZV93aXRoKH4gc3RyX3JlcGxhY2UoLngsIFxcRkRSX3AudmFsdWVcXCwgXFxGRFJcXCkpICU+JVxuICB1bmdyb3VwKClcbmBgYFxuYGBgIn0= -->

```r
```r
met_amt_lm_results_trt <- met_amt_lm %>% mutate(broomtidy.trt = map(lm_trt, broom::tidy)) %>%
  unnest(broomtidy.trt) %>%
  select(metabolite, term, estimate, p.value) %>%
  pivot_wider(id_cols = metabolite, names_from = term, values_from = c(estimate, p.value), names_prefix = \trt_\) %>%
  select(-`p.value_trt_(Intercept)`)

met_amt_lm_results_leaf <- met_amt_lm %>% mutate(broomtidy.leaf = map(lm_leaf, broom::tidy)) %>%
  unnest(broomtidy.leaf) %>%
  select(metabolite, term, estimate, p.value) %>%
  pivot_wider(id_cols = metabolite, names_from = term, values_from = c(estimate, p.value), names_prefix = \leaf_\) %>%
  select(-`p.value_leaf_(Intercept)`)

met_amt_lm_results <- inner_join(met_amt_lm_results_trt, met_amt_lm_results_leaf) %>%
  mutate(tissue=str_extract(metabolite,\(leaf|root)\)) %>%
  group_by(tissue) %>%
  mutate(across(starts_with(\p.value\), .fns = p.adjust, method = \fdr\, .names = \FDR_{.col}\)) %>%
  rename_with(~ str_replace(.x, \FDR_p.value\, \FDR\)) %>%
  ungroup()

<!-- rnb-source-end -->

<!-- rnb-output-begin eyJkYXRhIjoiSm9pbmluZywgYnkgPSBcXG1ldGFib2xpdGVcXFxuIn0= -->

Joining, by =




<!-- rnb-output-end -->

<!-- rnb-source-begin eyJkYXRhIjoiYGBgclxuYGBgclxubWV0X2FtdF9sbV9yZXN1bHRzICU+JSBcbiAgbXV0YXRlKGJvdGg9KEZEUl90cnRfdHJ0bGl2ZSA8IDAuMSkgJiAoRkRSX2xlYWZfdmFsdWVfc2NhbGUgPCAwLjEpKSAlPiVcbiAgZ3JvdXBfYnkodGlzc3VlKSAlPiVcbiAgc3VtbWFyaXplKGFjcm9zcyhzdGFydHNfd2l0aChcXEZEUlxcKSwgfiBzdW0oLnggPCAuMSkpLCBib3RoPXN1bShib3RoKSwgY291bnQ9bigpKVxuYGBgXG5gYGByXG5cbm1ldF9hbXRfbG1fcmVzdWx0cyAlPiUgZmlsdGVyKEZEUl90cnRfdHJ0bGl2ZSA8IDAuMSAmIEZEUl9sZWFmX3ZhbHVlX3NjYWxlIDwgMC4xKSAlPiUgXG4gIHNlbGVjdChtZXRhYm9saXRlLCBGRFJfdHJ0X3RydGxpdmUsIEZEUl9sZWFmX3ZhbHVlX3NjYWxlKVxuYGBgXG5gYGAifQ== -->

```r
```r
met_amt_lm_results %>% 
  mutate(both=(FDR_trt_trtlive < 0.1) & (FDR_leaf_value_scale < 0.1)) %>%
  group_by(tissue) %>%
  summarize(across(starts_with(\FDR\), ~ sum(.x < .1)), both=sum(both), count=n())

met_amt_lm_results %>% filter(FDR_trt_trtlive < 0.1 & FDR_leaf_value_scale < 0.1) %>% 
  select(metabolite, FDR_trt_trtlive, FDR_leaf_value_scale)

<!-- rnb-source-end -->

<!-- rnb-frame-begin eyJtZXRhZGF0YSI6eyJjbGFzc2VzIjpbInRibF9kZiIsInRibCIsImRhdGEuZnJhbWUiXSwibnJvdyI6MiwibmNvbCI6Nywic3VtbWFyeSI6eyJBIHRpYmJsZSI6IjIgw5cgNyJ9fSwicmRmIjoiSDRzSUFBQUFBQUFBQTIxUjNVckRNQlJPK3NzSzZrRHh5aHNmb0dVcWduZ25qRDFBVWRoZHlicHNMY2FrdE9uVU94L0pKMXgzMnVaQURSWk9jNzd2bkM4NVArbHkvUkN0STBLSVN6enFFTmNIbC9odnI2djRpUkRQQVVDSlIyYjkrUVZKbCtDRVlITXd4d1E4d2RrTy9Wb3BEZWZaRUIrLzZ3bCtBYnUxNG5TQ1hjTk40MVA4TzlxZnduekpQbmhqaWdvTkdlaXlhVnB1ME1WcW1XYTYxcjJKOG9EMEZkSjdMcFgrcm5qNnVGaVkySTBsZWY0blo5RDMzV2NISmxxZU5Ua1RlTGUzVWJyQUNuUFZTbTJWUGF2Vlo0S2xELzM5d0svcnVxUGRYeTVZZy8waEdXMlpac211QmowZ1d4S3FTcGRLZ3NqcE54YjBBak5wYWwxRWE0dVl0N0t2YWh2blJTdmY0N3Y3aVJoWFFjMDYwQS9IOTUzTzNCWGdFSGhlS053SWwvdFM0bmg4d1RaY0dIQU9veGdta1ZSMUNZTXlMUUxiSkZwcGhubFJyZ1F5UTlQa2VBSVIycTQyd1FJQUFBPT0ifQ== -->

<div data-pagedtable="false">
  <script data-pagedtable-source type="application/json">
{"columns":[{"label":["tissue"],"name":[1],"type":["chr"],"align":["left"]},{"label":["FDR_trt_trtlive"],"name":[2],"type":["int"],"align":["right"]},{"label":["FDR_trt_genotypeR500"],"name":[3],"type":["int"],"align":["right"]},{"label":["FDR_trt_trtlive:genotypeR500"],"name":[4],"type":["int"],"align":["right"]},{"label":["FDR_leaf_value_scale"],"name":[5],"type":["int"],"align":["right"]},{"label":["both"],"name":[6],"type":["int"],"align":["right"]},{"label":["count"],"name":[7],"type":["int"],"align":["right"]}],"data":[{"1":"leaf","2":"0","3":"65","4":"0","5":"3","6":"0","7":"176"},{"1":"root","2":"22","3":"33","4":"1","5":"0","6":"0","7":"176"}],"options":{"columns":{"min":{},"max":[10],"total":[7]},"rows":{"min":[10],"max":[10],"total":[2]},"pages":{}}}
  </script>
</div>

<!-- rnb-frame-end -->

<!-- rnb-source-begin eyJkYXRhIjoiYGBgclxuYGBgclxuXG5tZXRfYW10X2xtX3Jlc3VsdHMgJT4lIFxuICAjZmlsdGVyKEZEUi50cnQgPCAwLjEgfCBGRFIubGVhZiA8IDAuMSkgJT4lXG4gIG11dGF0ZShzaWcuYm90aCA9IEZEUl90cnRfdHJ0bGl2ZSA8IDAuMSAmIEZEUl9sZWFmX3ZhbHVlX3NjYWxlIDwgMC4xKSAlPiVcbiAgYXJyYW5nZShkZXNjKHNpZy5ib3RoKSwgbWluKC4kRkRSX3RydF90cnRsaXZlLCAuJEZEUl9sZWFmX3ZhbHVlX3NjYWxlKSkgJT4lIFxuICB3cml0ZV9jc3YoXFwuLi9vdXRwdXQvbWV0X2FtdF9sbV9mdWxsX05PQkxBTksuY3N2XFwpXG5gYGBcbmBgYCJ9 -->

```r
```r

met_amt_lm_results %>% 
  #filter(FDR.trt < 0.1 | FDR.leaf < 0.1) %>%
  mutate(sig.both = FDR_trt_trtlive < 0.1 & FDR_leaf_value_scale < 0.1) %>%
  arrange(desc(sig.both), min(.$FDR_trt_trtlive, .$FDR_leaf_value_scale)) %>% 
  write_csv(\../output/met_amt_lm_full_NOBLANK.csv\)

```

LS0tCnRpdGxlOiAiTWV0YWJvbGl0ZXMuLi5CYWNrIHRvIGJhc2ljcyIKYXV0aG9yOiAiSnVsaW4gTWFsb29mIgpkYXRlOiAiMDIvMjIvMjAyMSIKb3V0cHV0OiBodG1sX25vdGVib29rCi0tLQoKYGBge3Igc2V0dXAsIGluY2x1ZGU9RkFMU0V9CmtuaXRyOjpvcHRzX2NodW5rJHNldChlY2hvID0gVFJVRSkKYGBgCgpUYWtlIGEgZGlmZmVyZW50IGFwcHJvYWNoIHdpdGggbWV0YWJvbGl0ZXM6CgoxKSBJRCBtZXRhYm9saXRlcyByZXNwb25kaW5nIHRvIG1pY3JvYmVzCjIpIEFzayBpZiB0aG9zZSBhcmUgYXNzb2NpYXRlZCB3aXRoIGxlYWYgbGVuZ3RoCgpIZXJlIGluY2x1ZGUgZ2Vub3R5cGUgZm9yIHRoZSB0cmVhdG1lbnQgbW9kZWxzIGJ1dCB1c2Ugc2NhbGVkIGFuZCBjZW50ZXJlZCB2YWx1ZXMgZm9yIGxlYWYgYXNzb2NpYXRpb25zLgoKTk9URTogVEhJUyBJUyBUSEUgRklOQUwgQU5BTFlTSVMuIFRSSUVEIEFORCBESUQgTk9UIExJS0UgTE1FIE1PREVMUy4gIFRPTyBNQU5ZIFNJTkdVTEFSSVRJRVMuICBJIFRISU5LIFRIRVJFIElTIE5PVCBFTk9VR0ggREFUQSBUTyBFU1RJTUFURSBCTE9DSyBFRkZFQ0NUUyBXRUxMLgoKTk9URTogTkVYVCBTVEVQUzogIFRSWSBNQUtJTkcgVEVSTkFSWSBQTE9UIFdJVEggU0lNUExFIE1FQU5TLgoKCmBgYHtyfQpsaWJyYXJ5KHRpZHl2ZXJzZSkKbGlicmFyeShicm9vbSkKYGBgCgpnZXQgbGVhZmxlbmd0aCBkYXRhCmBgYHtyfQpsZWFmbGVuZ3RoIDwtIHJlYWRfY3N2KCIuLi8uLi9wbGFudC9vdXRwdXQvbGVhZl9sZW5ndGhzX21ldGFib2xpdGUuY3N2IikgJT4lCiAgbXV0YXRlKHBvdD1zdHJfcGFkKHBvdCwgd2lkdGg9MywgcGFkPSIwIiksCiAgICAgICAgIHNhbXBsZUlEPXN0cl9jKCJ3eW8iLCBnZW5vdHlwZSwgcG90LCBzZXA9Il8iKSkgJT4lCiAgc2VsZWN0KHNhbXBsZUlELCBnZW5vdHlwZSwgdHJ0LCBsZWFmX2F2Z19zdGQpCmxlYWZsZW5ndGggJT4lIGFycmFuZ2Uoc2FtcGxlSUQpCmBgYAoKZ2V0IGFuZCB3cmFuZ2xlIG1ldGFib2xpdGUgZGF0YQpgYGB7cn0KbWV0X3JhdyA8LXJlYWRfY3N2KCIuLi9pbnB1dC9tZXRhYm9saXRlc19zZXQxLmNzdiIpCm1ldCA8LSBtZXRfcmF3ICU+JSAKICBtdXRhdGUocG90PXN0cl9wYWQocG90LCB3aWR0aCA9IDMsIHBhZCA9ICIwIikpICU+JQogIG11dGF0ZShzYW1wbGVJRD1zdHJfYygid3lvIiwgZ2Vub3R5cGUsIHBvdCwgc2VwPSJfIikpICU+JQogIG11dGF0ZSh0cnQ9aWZlbHNlKGlzLm5hKGF1dG9jbGF2ZSksICJCTEFOSyIsIGF1dG9jbGF2ZSkpICU+JQogIHNlbGVjdChzYW1wbGVJRCwgZ2Vub3R5cGUsIHRpc3N1ZSwgdHJ0LCBzYW1wbGVfbWFzcyA9IGBzYW1wbGVfbWFzcyBtZ2AsICFzdWJtaXNzaW9uX251bWJlcjpjb25jYXRlbmF0ZSkgICU+JQogIAogICNicmluZyBpbiBsZWFmIGxlbmd0aAogIGxlZnRfam9pbih7bGVhZmxlbmd0aCAlPiUgc2VsZWN0KHNhbXBsZUlELCBsZWFmX2F2Z19zdGQpfSkgJT4lCiAgc2VsZWN0KHNhbXBsZUlELCBnZW5vdHlwZSwgdGlzc3VlLCB0cnQsIGxlYWZfYXZnX3N0ZCwgZXZlcnl0aGluZygpKSAlPiUKICAKICAjbWFrZSBsb25nCiAgcGl2b3RfbG9uZ2VyKCFzYW1wbGVJRDpzYW1wbGVfbWFzcywgbmFtZXNfdG8gPSAibWV0YWJvbGl0ZSIsIHZhbHVlc190byA9ICJtZXRfYW10IikgJT4lCiAgCiAgI2ZpbHRlciBhd2F5IHVubmFtZWQKICBmaWx0ZXIoc3RyX2RldGVjdChtZXRhYm9saXRlLCBwYXR0ZXJuPSJeWzAtOV0rJCIsIG5lZ2F0ZT1UUlVFKSkgJT4lCiAgCiAgI2FkanVzdCBieSBzYW1wbGUgbWFzcwogIG11dGF0ZShtZXRfcGVyX21nPW1ldF9hbXQvc2FtcGxlX21hc3MpICU+JQogIAogIHBpdm90X3dpZGVyKGlkX2NvbHMgPSBjKHNhbXBsZUlELCBnZW5vdHlwZSwgdHJ0LCBsZWFmX2F2Z19zdGQpLCAKICAgICAgICAgICAgICBuYW1lc19mcm9tID0gYyh0aXNzdWUsIG1ldGFib2xpdGUpLCAKICAgICAgICAgICAgICB2YWx1ZXNfZnJvbSA9IHN0YXJ0c193aXRoKCJtZXRfIiksCiAgICAgICAgICAgICAgbmFtZXNfc2VwID0gIl8iKQoKbWV0IApgYGAKCnNwbGl0IHRoaXMgaW50byB0d28gZGF0YSBmcmFtZXMsIG9uZSBub3JtYWxpemVkIGJ5IHRpc3N1ZSBhbW91bnQgYW5kIG9uZSBub3QuCmBgYHtyfQptZXRfcGVyX21nIDwtIG1ldCAlPiUgc2VsZWN0KHNhbXBsZUlELCBnZW5vdHlwZSwgdHJ0LCBsZWFmX2F2Z19zdGQsIHN0YXJ0c193aXRoKCJtZXRfcGVyX21nIikpICU+JQogIGFzLmRhdGEuZnJhbWUoKSAlPiUgY29sdW1uX3RvX3Jvd25hbWVzKCJzYW1wbGVJRCIpCm1ldF9hbXQgPC0gbWV0ICU+JSBzZWxlY3Qoc2FtcGxlSUQsICBnZW5vdHlwZSwgdHJ0LCBsZWFmX2F2Z19zdGQsIHN0YXJ0c193aXRoKCJtZXRfYW10IikpICU+JQogIGFzLmRhdGEuZnJhbWUoKSAlPiUgY29sdW1uX3RvX3Jvd25hbWVzKCJzYW1wbGVJRCIpCmBgYAoKCiMjIGZpbmQgc2lnIG1ldGFib2xpdGVzCgpMaXZlIHZzIGJsYW5rIGRlYWQKCm5vcm1hbGl6ZWQKYGBge3J9Cm1ldF9wZXJfbWdfbG0gPC0gbWV0X3Blcl9tZyAlPiUKICBtdXRhdGUodHJ0PWlmZWxzZShzdHJfZGV0ZWN0KHRydCwgImxpdmUiKSwgImxpdmUiLCAiYmxhbmtfZGVhZCIpKSAlPiUKICBwaXZvdF9sb25nZXIoY29scz1zdGFydHNfd2l0aCgibWV0IiksIG5hbWVzX3RvID0gIm1ldGFib2xpdGUiKSAlPiUKICBtdXRhdGUodGlzc3VlPXN0cl9leHRyYWN0KG1ldGFib2xpdGUsICJsZWFmfHJvb3QiKSkgJT4lCgogICNzY2FsZSBhbmQgY2VudGVyCiAgZ3JvdXBfYnkobWV0YWJvbGl0ZSwgZ2Vub3R5cGUsIHRpc3N1ZSkgJT4lCiAgbXV0YXRlKHZhbHVlX3NjYWxlPXNjYWxlKHZhbHVlKSkgJT4lCiAgZ3JvdXBfYnkobWV0YWJvbGl0ZSkgJT4lCiAgbmVzdCgpICU+JQogIG11dGF0ZShsbV90cnQ9bWFwKGRhdGEsIH4gbG0odmFsdWV+IHRydCpnZW5vdHlwZSAgICwgZGF0YT0uKSksCiAgICAgICAgIGxtX2xlYWY9bWFwKGRhdGEsIH4gbG0obGVhZl9hdmdfc3RkIH4gdmFsdWVfc2NhbGUsIGRhdGE9LikpKQoKYGBgCgoKYGBge3J9Cm1ldF9wZXJfbWdfbG1fcmVzdWx0c190cnQgPC0gbWV0X3Blcl9tZ19sbSAlPiUgbXV0YXRlKGJyb29tdGlkeS50cnQgPSBtYXAobG1fdHJ0LCBicm9vbTo6dGlkeSkpICU+JQogIHVubmVzdChicm9vbXRpZHkudHJ0KSAlPiUKICBzZWxlY3QobWV0YWJvbGl0ZSwgdGVybSwgZXN0aW1hdGUsIHAudmFsdWUpICU+JQogIHBpdm90X3dpZGVyKGlkX2NvbHMgPSBtZXRhYm9saXRlLCBuYW1lc19mcm9tID0gdGVybSwgdmFsdWVzX2Zyb20gPSBjKGVzdGltYXRlLCBwLnZhbHVlKSwgbmFtZXNfcHJlZml4ID0gInRydF8iKSAlPiUKICBzZWxlY3QoLWBwLnZhbHVlX3RydF8oSW50ZXJjZXB0KWApCgptZXRfcGVyX21nX2xtX3Jlc3VsdHNfbGVhZiA8LSBtZXRfcGVyX21nX2xtICU+JSBtdXRhdGUoYnJvb210aWR5LmxlYWYgPSBtYXAobG1fbGVhZiwgYnJvb206OnRpZHkpKSAlPiUKICB1bm5lc3QoYnJvb210aWR5LmxlYWYpICU+JQogIHNlbGVjdChtZXRhYm9saXRlLCB0ZXJtLCBlc3RpbWF0ZSwgcC52YWx1ZSkgJT4lCiAgcGl2b3Rfd2lkZXIoaWRfY29scyA9IG1ldGFib2xpdGUsIG5hbWVzX2Zyb20gPSB0ZXJtLCB2YWx1ZXNfZnJvbSA9IGMoZXN0aW1hdGUsIHAudmFsdWUpLCBuYW1lc19wcmVmaXggPSAibGVhZl8iKSAlPiUKICBzZWxlY3QoLWBwLnZhbHVlX2xlYWZfKEludGVyY2VwdClgKQoKbWV0X3Blcl9tZ19sbV9yZXN1bHRzIDwtIGlubmVyX2pvaW4obWV0X3Blcl9tZ19sbV9yZXN1bHRzX3RydCwgbWV0X3Blcl9tZ19sbV9yZXN1bHRzX2xlYWYpICU+JQogIG11dGF0ZSh0aXNzdWU9c3RyX2V4dHJhY3QobWV0YWJvbGl0ZSwiKGxlYWZ8cm9vdCkiKSkgJT4lCiAgZ3JvdXBfYnkodGlzc3VlKSAlPiUKICBtdXRhdGUoYWNyb3NzKHN0YXJ0c193aXRoKCJwLnZhbHVlIiksIC5mbnMgPSBwLmFkanVzdCwgbWV0aG9kID0gImZkciIsIC5uYW1lcyA9ICJGRFJfey5jb2x9IikpICU+JQogIHJlbmFtZV93aXRoKH4gc3RyX3JlcGxhY2UoLngsICJGRFJfcC52YWx1ZSIsICJGRFIiKSkgJT4lCiAgdW5ncm91cCgpCgptZXRfcGVyX21nX2xtX3Jlc3VsdHMgJT4lIAogIG11dGF0ZShib3RoPShGRFJfdHJ0X3RydGxpdmUgPCAwLjEpICYgKEZEUl9sZWFmX3ZhbHVlX3NjYWxlIDwgMC4xKSkgJT4lCiAgZ3JvdXBfYnkodGlzc3VlKSAlPiUKICBzdW1tYXJpemUoYWNyb3NzKHN0YXJ0c193aXRoKCJGRFIiKSwgfiBzdW0oLnggPCAuMSkpLCBib3RoPXN1bShib3RoKSwgY291bnQ9bigpKQoKbWV0X3Blcl9tZ19sbV9yZXN1bHRzICU+JSAKICBtdXRhdGUoYm90aD0ocC52YWx1ZV90cnRfdHJ0bGl2ZSA8IDAuMSkgJiAocC52YWx1ZV9sZWFmX3ZhbHVlX3NjYWxlIDwgMC4xKSkgJT4lCiAgZ3JvdXBfYnkodGlzc3VlKSAlPiUKICBzdW1tYXJpemUoYWNyb3NzKHN0YXJ0c193aXRoKCJwLnZhbHVlIiksIH4gc3VtKC54IDwgLjA1KSksIGJvdGg9c3VtKGJvdGgpLCBjb3VudD1uKCkpCgptZXRfcGVyX21nX2xtX3Jlc3VsdHMgJT4lIGZpbHRlcihGRFJfdHJ0X3RydGxpdmUgPCAwLjEgJiBGRFJfbGVhZl92YWx1ZV9zY2FsZSA8IDAuMSkgJT4lIAogIHNlbGVjdChtZXRhYm9saXRlLCBGRFJfdHJ0X3RydGxpdmUsIEZEUl9sZWFmX3ZhbHVlX3NjYWxlKQoKCgptZXRfcGVyX21nX2xtX3Jlc3VsdHMgJT4lIAogICNmaWx0ZXIoRkRSLnRydCA8IDAuMSB8IEZEUi5sZWFmIDwgMC4xKSAlPiUKICBtdXRhdGUoc2lnLmJvdGggPSBGRFJfdHJ0X3RydGxpdmUgPCAwLjEgJiBGRFJfbGVhZl92YWx1ZV9zY2FsZSA8IDAuMSkgJT4lCiAgYXJyYW5nZShkZXNjKHNpZy5ib3RoKSwgbWluKC4kRkRSX3RydF90cnRsaXZlLCAuJEZEUl9sZWFmX3ZhbHVlX3NjYWxlKSkgJT4lIAogIHdyaXRlX2NzdigiLi4vb3V0cHV0L21ldF9wZXJfbWdfbG1fZnVsbC5jc3YiKQpgYGAKCnJhdwpgYGB7cn0KbWV0X2FtdF9sbSA8LSBtZXRfYW10ICU+JQogIG11dGF0ZSh0cnQ9aWZlbHNlKHN0cl9kZXRlY3QodHJ0LCAibGl2ZSIpLCAibGl2ZSIsICJibGFua19kZWFkIikpICU+JQogIHBpdm90X2xvbmdlcihjb2xzPXN0YXJ0c193aXRoKCJtZXQiKSwgbmFtZXNfdG8gPSAibWV0YWJvbGl0ZSIpICU+JQogIG11dGF0ZSh0aXNzdWU9c3RyX2V4dHJhY3QobWV0YWJvbGl0ZSwgImxlYWZ8cm9vdCIpKSAlPiUKCiAgI3NjYWxlIGFuZCBjZW50ZXIKICBncm91cF9ieShtZXRhYm9saXRlLCBnZW5vdHlwZSwgdGlzc3VlKSAlPiUKICBtdXRhdGUodmFsdWVfc2NhbGU9c2NhbGUodmFsdWUpKSAlPiUKICBncm91cF9ieShtZXRhYm9saXRlKSAlPiUKICBuZXN0KCkgJT4lCiAgbXV0YXRlKGxtX3RydD1tYXAoZGF0YSwgfiBsbSh2YWx1ZSB+IHRydCAqIGdlbm90eXBlLCBkYXRhPS4pKSwKICAgICAgICAgbG1fbGVhZj1tYXAoZGF0YSwgfiBsbShsZWFmX2F2Z19zdGQgfiB2YWx1ZV9zY2FsZSwgZGF0YT0uKSkpCgpgYGAKCgpgYGB7cn0KbWV0X2FtdF9sbV9yZXN1bHRzX3RydCA8LSBtZXRfYW10X2xtICU+JSBtdXRhdGUoYnJvb210aWR5LnRydCA9IG1hcChsbV90cnQsIGJyb29tOjp0aWR5KSkgJT4lCiAgdW5uZXN0KGJyb29tdGlkeS50cnQpICU+JQogIHNlbGVjdChtZXRhYm9saXRlLCB0ZXJtLCBlc3RpbWF0ZSwgcC52YWx1ZSkgJT4lCiAgcGl2b3Rfd2lkZXIoaWRfY29scyA9IG1ldGFib2xpdGUsIG5hbWVzX2Zyb20gPSB0ZXJtLCB2YWx1ZXNfZnJvbSA9IGMoZXN0aW1hdGUsIHAudmFsdWUpLCBuYW1lc19wcmVmaXggPSAidHJ0XyIpICU+JQogIHNlbGVjdCgtYHAudmFsdWVfdHJ0XyhJbnRlcmNlcHQpYCkKCm1ldF9hbXRfbG1fcmVzdWx0c19sZWFmIDwtIG1ldF9hbXRfbG0gJT4lIG11dGF0ZShicm9vbXRpZHkubGVhZiA9IG1hcChsbV9sZWFmLCBicm9vbTo6dGlkeSkpICU+JQogIHVubmVzdChicm9vbXRpZHkubGVhZikgJT4lCiAgc2VsZWN0KG1ldGFib2xpdGUsIHRlcm0sIGVzdGltYXRlLCBwLnZhbHVlKSAlPiUKICBwaXZvdF93aWRlcihpZF9jb2xzID0gbWV0YWJvbGl0ZSwgbmFtZXNfZnJvbSA9IHRlcm0sIHZhbHVlc19mcm9tID0gYyhlc3RpbWF0ZSwgcC52YWx1ZSksIG5hbWVzX3ByZWZpeCA9ICJsZWFmXyIpICU+JQogIHNlbGVjdCgtYHAudmFsdWVfbGVhZl8oSW50ZXJjZXB0KWApCgptZXRfYW10X2xtX3Jlc3VsdHMgPC0gaW5uZXJfam9pbihtZXRfYW10X2xtX3Jlc3VsdHNfdHJ0LCBtZXRfYW10X2xtX3Jlc3VsdHNfbGVhZikgJT4lCiAgbXV0YXRlKHRpc3N1ZT1zdHJfZXh0cmFjdChtZXRhYm9saXRlLCIobGVhZnxyb290KSIpKSAlPiUKICBncm91cF9ieSh0aXNzdWUpICU+JQogIG11dGF0ZShhY3Jvc3Moc3RhcnRzX3dpdGgoInAudmFsdWUiKSwgLmZucyA9IHAuYWRqdXN0LCBtZXRob2QgPSAiZmRyIiwgLm5hbWVzID0gIkZEUl97LmNvbH0iKSkgJT4lCiAgcmVuYW1lX3dpdGgofiBzdHJfcmVwbGFjZSgueCwgIkZEUl9wLnZhbHVlIiwgIkZEUiIpKSAlPiUKICB1bmdyb3VwKCkKCm1ldF9hbXRfbG1fcmVzdWx0cyAlPiUgCiAgbXV0YXRlKGJvdGg9KEZEUl90cnRfdHJ0bGl2ZSA8IDAuMSkgJiAoRkRSX2xlYWZfdmFsdWVfc2NhbGUgPCAwLjEpKSAlPiUKICBncm91cF9ieSh0aXNzdWUpICU+JQogIHN1bW1hcml6ZShhY3Jvc3Moc3RhcnRzX3dpdGgoIkZEUiIpLCB+IHN1bSgueCA8IC4xKSksIGJvdGg9c3VtKGJvdGgpLCBjb3VudD1uKCkpCgptZXRfYW10X2xtX3Jlc3VsdHMgJT4lIAogIG11dGF0ZShib3RoPShwLnZhbHVlX3RydF90cnRsaXZlIDwgMC4xKSAmIChwLnZhbHVlX2xlYWZfdmFsdWVfc2NhbGUgPCAwLjEpKSAlPiUKICBncm91cF9ieSh0aXNzdWUpICU+JQogIHN1bW1hcml6ZShhY3Jvc3Moc3RhcnRzX3dpdGgoInAudmFsdWUiKSwgfiBzdW0oLnggPCAuMDUpKSwgYm90aD1zdW0oYm90aCksIGNvdW50PW4oKSkKCm1ldF9hbXRfbG1fcmVzdWx0cyAlPiUgZmlsdGVyKEZEUl90cnRfdHJ0bGl2ZSA8IDAuMSAmIEZEUl9sZWFmX3ZhbHVlX3NjYWxlIDwgMC4xKSAlPiUgCiAgc2VsZWN0KG1ldGFib2xpdGUsIEZEUl90cnRfdHJ0bGl2ZSwgRkRSX2xlYWZfdmFsdWVfc2NhbGUpCgptZXRfYW10X2xtX3Jlc3VsdHMgJT4lIAogICNmaWx0ZXIoRkRSLnRydCA8IDAuMSB8IEZEUi5sZWFmIDwgMC4xKSAlPiUKICBtdXRhdGUoc2lnLmJvdGggPSBGRFJfdHJ0X3RydGxpdmUgPCAwLjEgJiBGRFJfbGVhZl92YWx1ZV9zY2FsZSA8IDAuMSkgJT4lCiAgYXJyYW5nZShkZXNjKHNpZy5ib3RoKSwgbWluKC4kRkRSX3RydF90cnRsaXZlLCAuJEZEUl9sZWFmX3ZhbHVlX3NjYWxlKSkgJT4lIAogIHdyaXRlX2NzdigiLi4vb3V0cHV0L21ldF9hbXRfbG1fZnVsbC5jc3YiKQpgYGAKCiMgTk8gQkxBTksKCgojIyBmaW5kIHNpZyBtZXRhYm9saXRlcwpMaXZlIHZzICBkZWFkCgpub3JtYWxpemVkCmBgYHtyfQptZXRfcGVyX21nX2xtIDwtIG1ldF9wZXJfbWcgJT4lCiAgZmlsdGVyKHRydCAhPSAiQkxBTksiKSAlPiUgCiAgbXV0YXRlKHRydD1pZmVsc2Uoc3RyX2RldGVjdCh0cnQsICJsaXZlIiksICJsaXZlIiwgImJsYW5rX2RlYWQiKSkgJT4lCiAgcGl2b3RfbG9uZ2VyKGNvbHM9c3RhcnRzX3dpdGgoIm1ldCIpLCBuYW1lc190byA9ICJtZXRhYm9saXRlIikgJT4lCiAgbXV0YXRlKHRpc3N1ZT1zdHJfZXh0cmFjdChtZXRhYm9saXRlLCAibGVhZnxyb290IikpICU+JQoKICAjc2NhbGUgYW5kIGNlbnRlcgogIGdyb3VwX2J5KG1ldGFib2xpdGUsIGdlbm90eXBlLCB0aXNzdWUpICU+JQogIG11dGF0ZSh2YWx1ZV9zY2FsZT1zY2FsZSh2YWx1ZSkpICU+JQogIGdyb3VwX2J5KG1ldGFib2xpdGUpICU+JQogIG5lc3QoKSAlPiUKICBtdXRhdGUobG1fdHJ0PW1hcChkYXRhLCB+IGxtKHZhbHVlIH4gdHJ0ICogZ2Vub3R5cGUsIGRhdGE9LikpLAogICAgICAgICBsbV9sZWFmPW1hcChkYXRhLCB+IGxtKGxlYWZfYXZnX3N0ZCB+IHZhbHVlX3NjYWxlLCBkYXRhPS4pKSkKCmBgYAoKCmBgYHtyfQptZXRfcGVyX21nX2xtX3Jlc3VsdHNfdHJ0IDwtIG1ldF9wZXJfbWdfbG0gJT4lIG11dGF0ZShicm9vbXRpZHkudHJ0ID0gbWFwKGxtX3RydCwgYnJvb206OnRpZHkpKSAlPiUKICB1bm5lc3QoYnJvb210aWR5LnRydCkgJT4lCiAgc2VsZWN0KG1ldGFib2xpdGUsIHRlcm0sIGVzdGltYXRlLCBwLnZhbHVlKSAlPiUKICBwaXZvdF93aWRlcihpZF9jb2xzID0gbWV0YWJvbGl0ZSwgbmFtZXNfZnJvbSA9IHRlcm0sIHZhbHVlc19mcm9tID0gYyhlc3RpbWF0ZSwgcC52YWx1ZSksIG5hbWVzX3ByZWZpeCA9ICJ0cnRfIikgJT4lCiAgc2VsZWN0KC1gcC52YWx1ZV90cnRfKEludGVyY2VwdClgKQoKbWV0X3Blcl9tZ19sbV9yZXN1bHRzX2xlYWYgPC0gbWV0X3Blcl9tZ19sbSAlPiUgbXV0YXRlKGJyb29tdGlkeS5sZWFmID0gbWFwKGxtX2xlYWYsIGJyb29tOjp0aWR5KSkgJT4lCiAgdW5uZXN0KGJyb29tdGlkeS5sZWFmKSAlPiUKICBzZWxlY3QobWV0YWJvbGl0ZSwgdGVybSwgZXN0aW1hdGUsIHAudmFsdWUpICU+JQogIHBpdm90X3dpZGVyKGlkX2NvbHMgPSBtZXRhYm9saXRlLCBuYW1lc19mcm9tID0gdGVybSwgdmFsdWVzX2Zyb20gPSBjKGVzdGltYXRlLCBwLnZhbHVlKSwgbmFtZXNfcHJlZml4ID0gImxlYWZfIikgJT4lCiAgc2VsZWN0KC1gcC52YWx1ZV9sZWFmXyhJbnRlcmNlcHQpYCkKCm1ldF9wZXJfbWdfbG1fcmVzdWx0cyA8LSBpbm5lcl9qb2luKG1ldF9wZXJfbWdfbG1fcmVzdWx0c190cnQsIG1ldF9wZXJfbWdfbG1fcmVzdWx0c19sZWFmKSAlPiUKICBtdXRhdGUodGlzc3VlPXN0cl9leHRyYWN0KG1ldGFib2xpdGUsIihsZWFmfHJvb3QpIikpICU+JQogIGdyb3VwX2J5KHRpc3N1ZSkgJT4lCiAgbXV0YXRlKGFjcm9zcyhzdGFydHNfd2l0aCgicC52YWx1ZSIpLCAuZm5zID0gcC5hZGp1c3QsIG1ldGhvZCA9ICJmZHIiLCAubmFtZXMgPSAiRkRSX3suY29sfSIpKSAlPiUKICByZW5hbWVfd2l0aCh+IHN0cl9yZXBsYWNlKC54LCAiRkRSX3AudmFsdWUiLCAiRkRSIikpICU+JQogIHVuZ3JvdXAoKQoKbWV0X3Blcl9tZ19sbV9yZXN1bHRzICU+JSAKICBtdXRhdGUoYm90aD0oRkRSX3RydF90cnRsaXZlIDwgMC4xKSAmIChGRFJfbGVhZl92YWx1ZV9zY2FsZSA8IDAuMSkpICU+JQogIGdyb3VwX2J5KHRpc3N1ZSkgJT4lCiAgc3VtbWFyaXplKGFjcm9zcyhzdGFydHNfd2l0aCgiRkRSIiksIH4gc3VtKC54IDwgLjEpKSwgYm90aD1zdW0oYm90aCksIGNvdW50PW4oKSkKCm1ldF9wZXJfbWdfbG1fcmVzdWx0cyAlPiUgZmlsdGVyKEZEUl90cnRfdHJ0bGl2ZSA8IDAuMSAmIEZEUl9sZWFmX3ZhbHVlX3NjYWxlIDwgMC4xKSAlPiUgCiAgc2VsZWN0KG1ldGFib2xpdGUsIEZEUl90cnRfdHJ0bGl2ZSwgRkRSX2xlYWZfdmFsdWVfc2NhbGUpCgptZXRfcGVyX21nX2xtX3Jlc3VsdHMgJT4lIAogICNmaWx0ZXIoRkRSLnRydCA8IDAuMSB8IEZEUi5sZWFmIDwgMC4xKSAlPiUKICBtdXRhdGUoc2lnLmJvdGggPSBGRFJfdHJ0X3RydGxpdmUgPCAwLjEgJiBGRFJfbGVhZl92YWx1ZV9zY2FsZSA8IDAuMSkgJT4lCiAgYXJyYW5nZShkZXNjKHNpZy5ib3RoKSwgbWluKC4kRkRSX3RydF90cnRsaXZlLCAuJEZEUl9sZWFmX3ZhbHVlX3NjYWxlKSkgJT4lIAogIHdyaXRlX2NzdigiLi4vb3V0cHV0L21ldF9wZXJfbWdfbG1fZnVsbF9OT0JMQU5LLmNzdiIpCmBgYAoKcmF3CmBgYHtyfQptZXRfYW10X2xtIDwtIG1ldF9hbXQgJT4lCiAgZmlsdGVyKHRydCAhPSAiQkxBTksiKSAlPiUgCiAgcGl2b3RfbG9uZ2VyKGNvbHM9c3RhcnRzX3dpdGgoIm1ldCIpLCBuYW1lc190byA9ICJtZXRhYm9saXRlIikgJT4lCiAgbXV0YXRlKHRpc3N1ZT1zdHJfZXh0cmFjdChtZXRhYm9saXRlLCAibGVhZnxyb290IikpICU+JQoKICAjc2NhbGUgYW5kIGNlbnRlcgogIGdyb3VwX2J5KG1ldGFib2xpdGUsIGdlbm90eXBlLCB0aXNzdWUpICU+JQogIG11dGF0ZSh2YWx1ZV9zY2FsZT1zY2FsZSh2YWx1ZSkpICU+JQogIGdyb3VwX2J5KG1ldGFib2xpdGUpICU+JQogIG5lc3QoKSAlPiUKICBtdXRhdGUobG1fdHJ0PW1hcChkYXRhLCB+IGxtKHZhbHVlIH4gdHJ0ICogZ2Vub3R5cGUsIGRhdGE9LikpLAogICAgICAgICBsbV9sZWFmPW1hcChkYXRhLCB+IGxtKGxlYWZfYXZnX3N0ZCB+IHZhbHVlX3NjYWxlLCBkYXRhPS4pKSkKCmBgYAoKCmBgYHtyfQptZXRfYW10X2xtX3Jlc3VsdHNfdHJ0IDwtIG1ldF9hbXRfbG0gJT4lIG11dGF0ZShicm9vbXRpZHkudHJ0ID0gbWFwKGxtX3RydCwgYnJvb206OnRpZHkpKSAlPiUKICB1bm5lc3QoYnJvb210aWR5LnRydCkgJT4lCiAgc2VsZWN0KG1ldGFib2xpdGUsIHRlcm0sIGVzdGltYXRlLCBwLnZhbHVlKSAlPiUKICBwaXZvdF93aWRlcihpZF9jb2xzID0gbWV0YWJvbGl0ZSwgbmFtZXNfZnJvbSA9IHRlcm0sIHZhbHVlc19mcm9tID0gYyhlc3RpbWF0ZSwgcC52YWx1ZSksIG5hbWVzX3ByZWZpeCA9ICJ0cnRfIikgJT4lCiAgc2VsZWN0KC1gcC52YWx1ZV90cnRfKEludGVyY2VwdClgKQoKbWV0X2FtdF9sbV9yZXN1bHRzX2xlYWYgPC0gbWV0X2FtdF9sbSAlPiUgbXV0YXRlKGJyb29tdGlkeS5sZWFmID0gbWFwKGxtX2xlYWYsIGJyb29tOjp0aWR5KSkgJT4lCiAgdW5uZXN0KGJyb29tdGlkeS5sZWFmKSAlPiUKICBzZWxlY3QobWV0YWJvbGl0ZSwgdGVybSwgZXN0aW1hdGUsIHAudmFsdWUpICU+JQogIHBpdm90X3dpZGVyKGlkX2NvbHMgPSBtZXRhYm9saXRlLCBuYW1lc19mcm9tID0gdGVybSwgdmFsdWVzX2Zyb20gPSBjKGVzdGltYXRlLCBwLnZhbHVlKSwgbmFtZXNfcHJlZml4ID0gImxlYWZfIikgJT4lCiAgc2VsZWN0KC1gcC52YWx1ZV9sZWFmXyhJbnRlcmNlcHQpYCkKCm1ldF9hbXRfbG1fcmVzdWx0cyA8LSBpbm5lcl9qb2luKG1ldF9hbXRfbG1fcmVzdWx0c190cnQsIG1ldF9hbXRfbG1fcmVzdWx0c19sZWFmKSAlPiUKICBtdXRhdGUodGlzc3VlPXN0cl9leHRyYWN0KG1ldGFib2xpdGUsIihsZWFmfHJvb3QpIikpICU+JQogIGdyb3VwX2J5KHRpc3N1ZSkgJT4lCiAgbXV0YXRlKGFjcm9zcyhzdGFydHNfd2l0aCgicC52YWx1ZSIpLCAuZm5zID0gcC5hZGp1c3QsIG1ldGhvZCA9ICJmZHIiLCAubmFtZXMgPSAiRkRSX3suY29sfSIpKSAlPiUKICByZW5hbWVfd2l0aCh+IHN0cl9yZXBsYWNlKC54LCAiRkRSX3AudmFsdWUiLCAiRkRSIikpICU+JQogIHVuZ3JvdXAoKQoKbWV0X2FtdF9sbV9yZXN1bHRzICU+JSAKICBtdXRhdGUoYm90aD0oRkRSX3RydF90cnRsaXZlIDwgMC4xKSAmIChGRFJfbGVhZl92YWx1ZV9zY2FsZSA8IDAuMSkpICU+JQogIGdyb3VwX2J5KHRpc3N1ZSkgJT4lCiAgc3VtbWFyaXplKGFjcm9zcyhzdGFydHNfd2l0aCgiRkRSIiksIH4gc3VtKC54IDwgLjEpKSwgYm90aD1zdW0oYm90aCksIGNvdW50PW4oKSkKCm1ldF9hbXRfbG1fcmVzdWx0cyAlPiUgZmlsdGVyKEZEUl90cnRfdHJ0bGl2ZSA8IDAuMSAmIEZEUl9sZWFmX3ZhbHVlX3NjYWxlIDwgMC4xKSAlPiUgCiAgc2VsZWN0KG1ldGFib2xpdGUsIEZEUl90cnRfdHJ0bGl2ZSwgRkRSX2xlYWZfdmFsdWVfc2NhbGUpCgptZXRfYW10X2xtX3Jlc3VsdHMgJT4lIAogICNmaWx0ZXIoRkRSLnRydCA8IDAuMSB8IEZEUi5sZWFmIDwgMC4xKSAlPiUKICBtdXRhdGUoc2lnLmJvdGggPSBGRFJfdHJ0X3RydGxpdmUgPCAwLjEgJiBGRFJfbGVhZl92YWx1ZV9zY2FsZSA8IDAuMSkgJT4lCiAgYXJyYW5nZShkZXNjKHNpZy5ib3RoKSwgbWluKC4kRkRSX3RydF90cnRsaXZlLCAuJEZEUl9sZWFmX3ZhbHVlX3NjYWxlKSkgJT4lIAogIHdyaXRlX2NzdigiLi4vb3V0cHV0L21ldF9hbXRfbG1fZnVsbF9OT0JMQU5LLmNzdiIpCmBgYAo=